<?


/*
*
*   Excalibur Content Management System
*   Copyright © 2008 Egor "Sontan" Kuryanovich
*
*   Based on Explay Engine v2.0 by Golovdinov Alexander
*
*   Official site: www.excms.ru
*   Contact e-mail: support@excms.ru
*
*   GNU General Public License original source:
*   http://www.gnu.org/licenses/gpl-3.0.html
*
*/



class XML {

	var $xml_file = ""; // Путь к обрабатываемому файлу
	var $file_content = "";
	
	// Эта функция кеширует записывает содержимое файла в переменную, к которой в последствие
	// и обращается вместо файла.	
	function cache_file () {
		$file = @file_get_contents ($this->xml_file);
		if ($file == "") print "<p>XML file {$this->xml_file} not exists!</p>";
		$this->file_content = $file;
	}
	
	// Эта функция возвращает содержание первого по порядку тега в тексте.
	// Тег задается переменной $start. По-умолчанию окончание тега совпадает с его началом.
	// Пример:
	// $classname->select ("body"); - возвратит все содержимое первого тега <body></body>, где
	// "classname" - имя этого класса.
	// $classname->select ("day=\"5\"", "day"); - возвратит содержимое первого тега <day="5"></day>.
	function select ($start, $end = false) {
		
		if ($end == false) $end = $start;
		
		if ($this->file_content == "") {
			if (file_exists($this->xml_file)) {
				$file = file_get_contents ($this->xml_file);
				
				preg_match_all ("#<$start>(.+?)</$end>#is", $file, $tag_content);
				return $tag_content[1][0];
			}
			else print "<p>XML file {$this->xml_file} not exists!</p>";
		}
		else {
			preg_match_all ("#<$start>(.+?)</$end>#is", $this->file_content, $tag_content);
			return $tag_content[1][0];
		}
	
	}
	
	// Эта функия подобна select(), только она возвращает массив с содержимым всех тегов удволетворяющих параметрам.
	// Например если в документе несколько негов <h1>, то эта функция вернет всех их в массиве.
	function select_array ($start, $end = false) {
		
		if ($end == false) $end = $start;
		
		if ($this->file_content == "") {
			if (file_exists($this->xml_file)) {
				$file = file_get_contents ($this->xml_file);
				
				preg_match_all ("#<$start>(.+?)</$end>#is", $file, $tag_content);
				return $tag_content[0];
			}
			else print "<p>XML file {$this->xml_file} not exists!</p>";
		}
		else {
			preg_match_all ("#<$start>(.+?)</$end>#is", $this->file_content, $tag_content);
			return $tag_content[0];
		}
	
	}
	
	// Эта функция подобна select(), но обрабатывает заданую строку - $string.
	// Пример:
	// $classname->select_from_text ("body", "<head><title>Title</title><head>  <body>text text</body>");
	function select_from_text ($start, $string, $end = false) {
		
		if ($end == false) $end = $start;
		
		if ($string != "") {
			preg_match_all ("#<$start>(.+?)</$end>#is", $string, $tag_content);
			return $tag_content[1][0];
		}
	
	}
	
	// Подобна функции select_from_text(), но возвращает массив.
	function select_array_from_text ($start, $string, $end = false) {
		
		if ($end == false) $end = $start;
		
		if ($string != "") {
			preg_match_all ("#<$start>(.+?)</$end>#is", $string, $tag_content);
			return $tag_content[0];
		}
	
	}

}

?>
